/*
 * @Author: 卡卡 1071780426@qq.com
 * @Date: 2023-09-13 09:52:07
 * @LastEditors: 贺楠 1071780426@qq.com
 * @LastEditTime: 2024-11-15 10:03:20
 * @FilePath: \zdgy\src\main.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
/*
 * @Author: CNN 969682281@qq.com
 * @Date: 2023-08-07 17:56:30
 * @LastEditors: 卡卡 1071780426@qq.com
 * @LastEditTime: 2023-09-18 11:48:26
 * @FilePath: \qiankun_vuecli\child\src\main.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */

// element-ui
import ElementUI from 'element-ui';

import {
  Message
} from 'element-ui';
// import globalComponent from './components/index' //引入需要注册的全部组件

ElementUI.Dialog.props.closeOnClickModal.default = false
import 'element-ui/lib/theme-chalk/index.css';
import './assets/css/element.css'
Vue.use(ElementUI,{ namespace: "zlyj" });



import Toast from './components/commonPublic/Toast/index.js'

Vue.prototype.$message = Toast



// //注意：这里使用的$message,所以在使用时候也是this.$message
// Vue.prototype.$message = function (msg) {
//   return Message({
//     message: msg,
//     duration: 100000,
//     customClass:"myClassMessage",
//   });
// };
// // 分别对success、warning和error等样式进行设置
// Vue.prototype.$message.success = function (msg) {
//   return Message.success({
//     message: msg,
//     customClass:"myClassMessage",
//     duration: 100000
//   });
// };
// Vue.prototype.$message.warning = function (msg) {
//   return Message.warning({
//     message: msg,
//     customClass:"myClassMessage",
//     duration: 100000
//   });
// };
// Vue.prototype.$message.error = function (msg) {
//   return Message.error({
//     message: msg,
//     customClass:"myClassMessage",
//     duration: 100000
//   });
// };
// element-ui
// 引入公共样式

import "./assets/css/global.css";
import "./assets/css/public.less";
// 引入公共样式
// import '@/utils/directive/directives.js'
import common from '@/utils/date.js'
import commonJs from '@/utils/common.js'
import './public-path';



import Vue from 'vue';

import VueRouter from 'vue-router'

Vue.use(VueRouter)
import Viewer from "v-viewer";
import "viewerjs/dist/viewer.css";
// 图片插件

Vue.use(Viewer, {
  defaultOptions: {
    zIndex: 9999
  }
});
Viewer.setDefaults({
  // toolbar: false,
  Options: {
    inline: true, // 是否启动inline模式
    button: true, // 是否显示右上角关闭按钮
    navbar: true, // 是否显示缩略图导航
    title: false, // 是否显示当前图片的标题
    toolbar: false, // 是否显示工具栏
    tooltip: true, // 是否显示缩放百分比
    movable: true, // 图片是否可移动
    zoomable: true, // 图片是否可缩放
    rotatable: true, // 图片是否可旋转
    scalable: true, // 图片是翻转
    transition: true, // 是否使用css3过渡
    fullscreen: true, // 播放时是否全屏
    keyboard: true, // 是否支持键盘
    url: "data-source" // 设置大图片的url
  }
});
import * as echarts from 'echarts'
Vue.prototype.$echarts = echarts
// 图表自适应
Vue.prototype.$echartsResize = function (ref) {
  window.addEventListener("resize", function () {
    ref.resize();
  });
};

import App from './App.vue';
import routes from './router';
import store from './store';

import actions from './actions'
import messagebox from '@/utils/MessageBox.js'


import axios from "axios";

axios.defaults.baseURL = ""

// 添加请求拦截器，在请求头中加token
axios.interceptors.request.use(
  config => {
    //判断token是否存在
    if (localStorage.getItem('GxEmbedded_token')) {
      // 在请求头中添加token
      config.headers.token = localStorage.getItem('GxEmbedded_token');
    }
    // Nprogress.start()
    return config;
  },
  error => {
    return Promise.reject(error);
  });
axios.interceptors.response.use(config => {
  // Nprogress.done()
  return config
})

Vue.prototype.$http = axios;



Vue.prototype.$MessageBox = messagebox
Vue.config.productionTip = false;
Vue.prototype.common = common;
Vue.prototype.commonJs = commonJs;

import md5 from 'js-md5'
Vue.prototype.$md5 = md5

let instance = null;
let originFn = document.body.appendChild.bind(document.body)
let router = null
let base = null

function render(props = {}) {
  const {
    container
  } = props;

  redirectPopup(container);
  base = window.__POWERED_BY_QIANKUN__ ? '/material/' : '/'
  router = new VueRouter({
    mode: 'history',
    base: base,
    routes
  })
  // instance = new Vue(App)
  // instance = createApp(App)
  // instance.use(router)
  // instance.mount(container ? container.querySelector('#app') : '#app')
  instance = new Vue({
    router,
    store,
    render: (h) => h(App),
  }).$mount(container ? container.querySelector('#app') : '#app');


}






export async function bootstrap() {
  // console.log('[vue] vue app bootstraped');
}

export async function mount(props) {
  // console.log(console.log('a:', this, 'b:', that), '应用每次进入都会调用 mount 方法，通常我们在这里触发应用的渲染方法', props)
  // props.onGlobalStateChange((state) => {
  //   console.log('子应用接收的参数', state)
  // }, true)
  // render(props)


  if (props) {
    actions.setActions(props)
  }
  // console.log('[vue] props from main framework', props);
  // props.onGlobalStateChange((state, prev) => {
  //   // state: 变更后的状态; prev 变更前的状态
  //   state = state
  // });
  render(props)

}

// function redirectPopup(container) {
//   let maindom = []
//   // 子应用中需要挂载到子应用的弹窗的className，用作标记
//   const addPopup = 'yjxa-select-dropdown yjxa-popper' //下拉框
//   const rangePicker = 'yjxa-picker-panel yjxa-date-range-picker yjxa-popper' //双选日历
//   const yearPicker = 'yjxa-picker-panel yjxa-date-picker yjxa-popper' //单选年日历
//   // const dialog = 'yjxa-message-box__wrapper'

//   const whiteList = [addPopup, rangePicker, yearPicker]


//   // setTimeout(() => {
//   //   whiteList.forEach(opt => {

//   //     let doms = document.getElementsByClassName(opt)

//   //     maindom = maindom.concat([...doms])
//   //   })
//   //   // console.log(66, maindom)

//   //   maindom.forEach(element => {
//   //     console.log(777, element, container)
//   //     container.querySelector('#app').appendChild(element)
//   //     //   container.querySelector('#app').appendChild(element)
//   //   });
//   // }, 100);

//   // // 保存原有document.body.appendChild方法
//   // let originFn = document.body.appendChild.bind(document.body)

//   // 重写appendChild方法
//   setTimeout(() => {
//     console.log(784);
//     document.body.appendChild = (dom) => {

//       // 根据标记，来区分是否用新的挂载方式
//       if (whiteList.includes(dom.className)) {
//         console.log(2);

//         console.log(88, dom);
//         container.querySelector('#app').appendChild(dom)
//       } else {
//         console.log(6);
//         originFn(dom)
//       }

//     }
//   }, 100);
// }


export function redirectPopup(container, isMyself = false) {
  if (!container && !isMyself) return false
  //白名单，哪些创建的class需要加我们定义的class
  const whiteObj = {
    'yjxa-select-dropdown': true,
    'yjxa-popper': true,
    'yjxa-dialog': true,
    'vue-treeselect': true,
    'yjxa-picker-panel': true,
    'yjxa-date-range-picker': true,
    'yjxa-date-picker': true,
    'yjxa-message-box': true,
    'yjxa-popup-parent--hidden': true,
    'yjxa-dialog__wrapper': true,
    'story-para-add-popup': true,
    // 'yjxa-dialog__wrapper': true,
    'story-para-edit-popup': true,
    // 'viewer-container': true,
    
    // 'el-tooltip': true,
    // 'el-tooltip__popper': true,

    // 'yjxa-tooltip__popper': true,
     'yjxa-dark': true,







  }

  // 保存原有document.body.appendChild方法
  // let originFn = document.body.appendChild.bind(document.body)

  // 重写appendChild方法
  setTimeout(() => {


    document.body.appendChild = (dom) => {
      // dom.className 是一个class 字符串集合 只需要符合其中一个就行
      // 根据标记，来区分是否用新的挂载方式
      let isTrue = false
      let box = []
      if (dom.className) {
        box = dom.className.split(' ')
      }
      box.forEach(ele => {
        if (whiteObj[ele]) {
          isTrue = true
        }
      })
      if (isTrue) {
        return false

      }
      originFn(dom)
    }
  }, 100)
}
export async function unmount() {
  instance.$el.innerHTML = '';
  instance = null;
  // base.destroy()
  // instance.$destroy();
  router = null
  document.body.appendChild = originFn


}
// export async function update(props) {
//   console.log('update props', props);
// // }
// if (process.env.NODE_ENV === 'development') {
//   window.qiankunLifecycle = {
//     bootstrap,
//     mount,
//     unmount,
//     update,
//   };
// }

// 独立运行时
if (!window.__POWERED_BY_QIANKUN__) {
  render();
}